模式定义
抽象工厂模式提供一个创建一系列相关或相关依赖对象的接口。
模式结构
抽象工厂模式包含以下角色:
- AbstractFactory:抽象工厂
- ConcreteFactory:具体工厂
- AbstractProduct:抽象产品
- Product:具体产品
代码实现
Engine接口
123public interface Engine {void engine();}Light接口
123public interface Light {void light();}BMWEngine
123456public class BMWEngine implements Engine {public void engine() {System.out.println("bmw engine");}}BMWLight
1234567public class BMWLight implements Light {public void light() {System.out.println("bmw light");}}AudiEngine
123456public class AudiEngine implements Engine {public void engine() {System.out.println("audi engine");}}AudiLight
123456public class AudiLight implements Light {public void light() {System.out.println("audi light");}}Factory接口
1234public interface Factory {Engine createEngine();Light createLight();}BMWFactory
1234567891011public class BMWFactory implements Factory {public Engine createEngine() {return new BMWEngine();}public Light createLight() {return new BMWLight();}}AudiFactory
1234567891011public class AudiFactory implements Factory {public Engine createEngine() {return new AudiEngine();}public Light createLight() {return new AudiLight();}}Test
123456789public class Test {public static void main(String[] args) {Factory factory = new AudiFactory();Engine engine = factory.createEngine();Light light = factory.createLight();engine.engine();light.light();}}
总结
- 抽象工厂模式包含四个角色:
- 抽象工厂用于声明生成抽象产品的方法
- 具体工厂实现了抽象工厂声明的生成抽象产品的方法,生成一组具体产品,这些产品构成了一个产品族
- 抽象产品为某种产品声明接口,在抽象产品中定义了产品的抽象业务方法
- 具体产品定义具体工厂生成的具体产品对象,实现抽闲产品接口中定义的业务方法
- 抽象工厂模式和工厂方法模式最大的区别在于,工厂方法模式针对的是一个产品等级结构,而抽象工厂模式则需要面对多个产品等级结构
- 本文转自3.抽象工厂模式。